package tech.aistar.mapper;


import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import org.springframework.stereotype.Service;
import tech.aistar.entity.Com;
import tech.aistar.entity.UserInfo;

import java.sql.Timestamp;
import java.util.List;

public interface UserInfoMapper {

    //根据用户主键id查询用户详细信息
    @Select("select * from user_info where id=#{value}")
    UserInfo findById(Integer Id);

    //根据账号查询信息
    @Select("select * from user_info where u_id=#{value}")
    UserInfo findByUid(String uId);

    //修改用户基本信息
    @Update("update user_info set u_name=#{uName},u_birthday=#{uBirthday},u_sex=#{uSex},province=#{Province},city=#{City},district=#{District},u_statement=#{uStatement},picfilename=#{picfilename} where id = #{id}")
    void editUserInfo(@Param("uName") String uName, @Param("uBirthday") Timestamp uBirthday,
                      @Param("uSex") Integer uSex, @Param("Province") String Province, @Param("City") String City, @Param("District") String District, @Param("uStatement") String uStatement,
                      @Param("picfilename") String picfilename, @Param("id") Integer id);

    //绑定/解绑邮箱
    @Update("update user_info set u_email = #{email} where id = #{id}")
    void addEmail(@Param("email") String uEmail, @Param("id") Integer id);

    //绑定手机
    @Update("update user_info set u_phone = #{phone} where id=#{id}")
    void addPhone(@Param("phone") String uPhone, @Param("id") Integer id);

    //清空访问量
    @Update("update user_info set view_num = 0 where id = #{id}")
    void delView(Integer id);

    //添加个人信息(和注册放到一起,注册的时候触发这个个人信息的添加)
    @Insert("insert into user_info values(#{id},#{u_id},#{u_name},null,null,'1970-01-01 00:00:00',0,18,now(),null,0,10,1,null,'北京','市辖区','宣武区',0,0,0,0,0,0,0,0,null)")
    void addUserInfo(@Param("id") Integer id, @Param("u_id") String uId, @Param("u_name") String uName);

    //增加/减少帖子数
    @Update("update user_info set post_num=#{post_num} where id = #{id}")
    void calPost(@Param("id") Integer id, @Param("post_num") Integer postNum);

    //增加/减少粉丝数
    @Update("update user_info set fans_num=#{fans_num} where id = #{id}")
    void calFans(@Param("id") Integer id, @Param("fans_num") Integer fansNum);

    //增加/减少关注数
    @Update("update user_info set fouc_num=#{fouc_num} where id = #{id}")
    void calFouc(@Param("id") Integer id, @Param("fouc_num") Integer foucNum);

    //增加/减少收藏数
    @Update("update user_info set like_num=#{like_num} where id = #{id}")
    void calLike(@Param("id") Integer id, @Param("like_num") Integer likeNum);

    //增加/减少点赞数
    @Update("update user_info set myzan_num=#{myzan_num} where id = #{id}")
    void calMyzan(@Param("id") Integer id, @Param("myzan_num") Integer myzanNum);

    //增加/减少评论数
    @Update("update user_info set comment_num=#{comment_num} where id = #{id}")
    void calComment(@Param("id") Integer id, @Param("comment_num") Integer commentNum);

    //    有待考量
    //增加访问量
    @Update("update user_info set view_num=#{view_num} where id = #{id}")
    void addView(@Param("id") Integer id, @Param("view_num") Integer viewNum);

    //得出所有手机号
    @Select("select u_phone from user_info")
    List<String> findPhones();

    //得出所有邮箱
    @Select("select u_email from user_info")
    List<String> findEmail();

    //redis
    @Select("select * from user_info")
    List<UserInfo> findAll();

    @Select("select * from user_info where id=#{id}")
    UserInfo getinfo(@Param("id") Integer id);


    //评论表的
//    根据用户的id 查询它回复的帖子和评论信息
    //根据评论者查询所有
    @Select("select * from comment where user_id = #{userId}")
    List<Com> findAllByUserId(Integer userId);

    //根据被评论者查询所有
    @Select("select * from comment where to_user_id = #{toUserId}")
    List<Com> findAllByToUserId(Integer toUserId);

    //帖子
    @Update("update post set point_num = #{pointNum} where post_id = #{postId}")
    void updatePost(@Param("pointNum") Integer pointNum, @Param("postId") Integer postId);
}
